package models;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import play.db.DB;

/**
 *
 * @author lucas
 */
public class Noticia {
	private int codigo;
	private int codigoUsuario;
	private boolean publica;
	private Timestamp dataDeCadastro;
	private String titulo;
	private String conteudo;
	
	public Noticia(int codigo, int codigoUsuario, boolean publica, Timestamp date, String titulo, String conteudo) {
		this.codigo = codigo;
		this.codigoUsuario = codigoUsuario;
		this.publica = publica;
		this.dataDeCadastro = date;
		this.titulo = titulo;
		this.conteudo = conteudo;
	}
	
	public Noticia() {
		this.codigo = -1;
	}
	/**
	 * @param public the publica to set
	 */
	public void setPublica(boolean publica) {
		this.publica = publica;
	}
	/**
	 * @return the publica
	 */
	public boolean isPublica() {
		return publica;
	}
	/**
	 * @param dataDeCadastro the dataDeCadastro to set
	 */
	public void setDataDeCadastro(Timestamp dataDeCadastro) {
		this.dataDeCadastro = dataDeCadastro;
	}
	/**
	 * @return the dataDeCadastro
	 */
	public Timestamp getDataDeCadastro() {
		return dataDeCadastro;
	}
	
	/**
	 * @return the date in a string format
	 */
	public String getDataDeCadastroString() {
		
		SimpleDateFormat format = new SimpleDateFormat("hh:mm dd/MM/yyyy"); 
		return format.format(dataDeCadastro);
	}
	
	/**
	 * @param titulo the titulo to set
	 */
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	/**
	 * @return the titulo
	 */
	public String getTitulo() {
		return titulo;
	}
	/**
	 * @param conteudo the conteudo to set
	 */
	public void setConteudo(String conteudo) {
		this.conteudo = conteudo;
	}
	/**
	 * @return the conteudo
	 */
	public String getConteudo() {
		return conteudo;
	}
	/**
	 * @param codigo the codigo to set
	 */
	public void setCodigo(int codigo) {
		this.codigo = codigo;
	}
	/**
	 * @return the codigo
	 */
	public int getCodigo() {
		return codigo;
	}
	
	/**
	 * @return the codigoUsuario
	 */
	public int getCodigoUsuario() {
		return codigoUsuario;
	}
	
	/**
	 * @param codigoUsuario
	 */
	public void setCodigoUsuario(int codigoUsuario) {
		this.codigoUsuario = codigoUsuario;
	}
	
	public static Noticia specific(int codigoNoticia) throws SQLException{
		ResultSet rs = DB.executeQuery("SELECT * FROM noticia WHERE codigo = '" + codigoNoticia + "'");
		Noticia not = null;
		if(rs.next()) {
			not = new Noticia(rs.getInt(1), rs.getInt(2), rs.getBoolean(3), 
   				rs.getTimestamp(4), rs.getString(5), rs.getString(6));
		}
		return not;
	}
	
	/**
	 * @param publica
	 * @return lista de noticias
	 * @throws SQLException
	 */
	public static List<Noticia> all(boolean publica) throws SQLException {
		ResultSet rs;
		if(publica)
			rs = DB.executeQuery("SELECT * FROM noticia WHERE publica = '" + publica + "'");
		else
			rs = DB.executeQuery("SELECT * FROM noticia");
    	
    	List<Noticia> lista = new ArrayList<Noticia>();
    	
    	while(rs.next()) {
    		Noticia not;
   			not = new Noticia(rs.getInt(1), rs.getInt(2), rs.getBoolean(3), 
   				rs.getTimestamp(4), rs.getString(5), rs.getString(6));
    		
    		lista.add(not);
    	}
    	
    	return lista;
    }
	
	/**
	 * @throws SQLException
	 */
	public void save() throws SQLException {
    	// executeQuery para pegar o MAX de codigo
    	if(this.codigo == -1) {
    		ResultSet rs = DB.executeQuery("SELECT max(codigo) FROM noticia");
    		rs.next();
    		
    		this.codigo = rs.getInt(1) + 1;
    	}
    	
    	SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm"); 
    	
    	DB.execute("INSERT INTO Noticia(codigo, codigo_usuario, publica, data_cadastro, titulo, conteudo) VALUES("
    			+ "'" + this.codigo + "',"
    			+ "'" + this.codigoUsuario + "',"
    			+ "'" + this.publica + "',"
    			+ "'" + format.format(this.dataDeCadastro) + "',"
    			+ "'" + this.titulo + "',"
    			+ "'" + this.conteudo + "'"
    			+ ")");
    }
	
	public static void delete(int codigoNoticia) {
		DB.execute("DELETE FROM noticia WHERE codigo = '" + codigoNoticia + "'");
	}
}